package com.hxd.tabactivityfragment.common

import android.graphics.drawable.Drawable
import android.view.View
import com.gyf.barlibrary.ImmersionBar
import com.hjq.bar.OnTitleBarListener
import com.hxd.tabactivityfragment.base.BaseFragment
import com.hxd.tabactivityfragment.util.DynamicTimeFormat
import com.scwang.smartrefresh.layout.SmartRefreshLayout
import com.scwang.smartrefresh.layout.header.ClassicsHeader
import java.text.SimpleDateFormat
import java.util.*


/*
 *  项目名：    Tab+Activity+Fragment
 *  包名：      com.hxd.tabactivityfragment.common
 *  文件名:     UIFragment
 *  创建者:     HXD
 *  创建时间:   2019/3/7 19:17
 *  描述:       支持沉浸式Fragment懒加载基类（默认不开启沉浸式）
 */

 abstract class UIFragment:BaseFragment() {


     // 状态栏沉浸
    private var mImmersionBar: ImmersionBar? = null

    private var mDrawableProgress: Drawable? = null
    private var mClassicsHeader: ClassicsHeader? = null

    override fun initFragment() {
        initImmersion()
        super.initFragment()
    }

    /**
     * 初始化沉浸式
     */
    private fun initImmersion() {
        // 初始化沉浸式状态栏
        if (isStatusBarEnabled()) {
            statusBarConfig()!!.init()
            // 设置标题栏
            if (getTitleBarId() > 0) {
                ImmersionBar.setTitleBar(mActivity, findViewById(getTitleBarId()))
            }
        }
    }

    /**
     * 是否在Fragment使用沉浸式
     */
    open fun isStatusBarEnabled(): Boolean = false

    /**
     * 获取状态栏沉浸的配置对象
     */
    protected fun getStatusBarConfig(): ImmersionBar? = mImmersionBar

    /**
     * 初始化沉浸式
     */
    private fun statusBarConfig(): ImmersionBar? {
        //在BaseActivity里初始化
        mImmersionBar = ImmersionBar.with(this)
            .statusBarDarkFont(statusBarDarkFont())    //默认状态栏字体颜色为黑色
            .keyboardEnable(true)  //解决软键盘与底部输入框冲突问题，默认为false，还有一个重载方法，可以指定软键盘mode
        return mImmersionBar
    }

    /**
     * 获取状态栏字体颜色
     * 回true表示黑色字体
     */
    open fun statusBarDarkFont(): Boolean = true

    override fun onDestroy() {
        super.onDestroy()
        if (mImmersionBar != null) mImmersionBar?.destroy()
    }

    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        if (isVisibleToUser && isStatusBarEnabled() && isLazyLoad()) {
            // 重新初始化状态栏
            statusBarConfig()?.init()
        }
    }

    //返回刷新布局的控件ID
    open fun getRefreshLayout(): SmartRefreshLayout? = null

    override fun initView() {
        mClassicsHeader = (getRefreshLayout())?.refreshHeader as ClassicsHeader?
        val delta = Random().nextInt(7 * 24 * 60 * 60 * 1000)
        mClassicsHeader?.setLastUpdateTime(Date(System.currentTimeMillis() - delta))
        mClassicsHeader?.setTimeFormat(SimpleDateFormat("更新于 MM-dd HH:mm", Locale.CHINA))
        mClassicsHeader?.setTimeFormat(DynamicTimeFormat("更新于 %s"))
    }


}